import java.util.ArrayList;

class Solution {
    /**
     * @param nums: A list of integers.
     * @return: A list of permutations.
     */
	
    public ArrayList<ArrayList<Integer>> permute(ArrayList<Integer> nums) 
    {
        // write your code here
    	int test;
    	ArrayList<ArrayList<Integer>> re=new ArrayList<ArrayList<Integer>>();
    	if(nums==null||nums.size()==0)
    		return re;
	
    	recursion(re, nums, 0,nums.size()-1);
    	return re;	
    }
    public static void main(String[] args)
    {
    	ArrayList<ArrayList<Integer>> re=new ArrayList<ArrayList<Integer>>();
    	ArrayList<Integer> nums=new ArrayList<Integer>(10);
    	
    	nums.add(0, 0);
    	nums.add(1, 1);
    	Solution test=new Solution();
    	re=test.permute(nums);
    	System.out.println(re);
    }
    public static void recursion(ArrayList<ArrayList<Integer>> re,ArrayList<Integer> nums,int i,int lasti)
    {
    	if(i==lasti)
    	{
    		ArrayList<Integer> temp=new ArrayList<Integer>();
    		for(int z=0;z<nums.size();z++)
    			temp.add(z,nums.get(z));
    		re.add(temp);
    		return;
    	}
    	int j;
    	recursion(re, nums, i+1, lasti);
    	Integer temp1,temp2;
    	temp1=nums.get(i);
    	for(j=i+1;j<=lasti;j++)
    	{
    		temp2=nums.get(j);
    		nums.set(i,temp2);
    		nums.set(j, temp1);
    		recursion(re, nums, i+1, lasti);   		
    		nums.set(i,temp1);
    		nums.set(j, temp2);
    	}
    }
}

